#ifndef __ASM_GENERIC_MMAN_H
#define __ASM_GENERIC_MMAN_H

#include <asm-generic/mman-common.h>
#include <asm-generic/bitsperlong.h>
#include <dim-sum/const.h>

#define MAP_GROWSDOWN	0x0100		/* stack-like segment */
#define MAP_DENYWRITE	0x0800		/* ETXTBSY */
#define MAP_EXECUTABLE	0x1000		/* mark it as an executable */
#define MAP_LOCKED	0x2000		/* pages are locked */
#define MAP_NORESERVE	0x4000		/* don't check for reservations */
#define MAP_POPULATE	0x8000		/* populate (prefault) pagetables */
#define MAP_NONBLOCK	0x10000		/* do not block on IO */
#define MAP_STACK	0x20000		/* give out an address that is best suited for process/thread stacks */
#define MAP_HUGETLB	0x40000		/* create a huge page mapping */

/* Bits [26:31] are reserved, see mman-common.h for MAP_HUGETLB usage */

#define MCL_CURRENT	1		/* lock all current mappings */
#define MCL_FUTURE	2		/* lock all future mappings */

#define PROT_EXT_KERN_BIT (BITS_PER_LONG - 1)
#define PROT_EXT_USER_BIT (BITS_PER_LONG - 2)

#define MAP_EXT_STACK_BIT (BITS_PER_LONG - 1)
#define MAP_EXT_ENV_BIT (BITS_PER_LONG - 2)
#define MAP_EXT_HEAP_BIT (BITS_PER_LONG - 3)

#ifndef UL
#define UL(x) _AC(x, UL)
#endif

#define PROT_EXT_KERN (UL(1) << PROT_EXT_KERN_BIT)
#define PROT_EXT_USER (UL(1) << PROT_EXT_USER_BIT)


#define MAP_EXT_STACK (UL(1) << MAP_EXT_STACK_BIT)
#define MAP_EXT_ENV (UL(1) << MAP_EXT_ENV_BIT)
#define MAP_EXT_HEAP (UL(1) << MAP_EXT_HEAP_BIT)

#endif /* __ASM_GENERIC_MMAN_H */